<?php
/**
 * Created by PhpStorm.
 * User: admin
 * Date: 2018/7/26
 * Time: 15:03
 */
namespace  App\Observers;
use App\Models\Entity\content_audit\content_audit;
class ContentAuditObserver
{

    /**
     * 监听数据即将创建的事件。
     *
     * @param  content_audit $content_audit
     * @return void
     */
    public function creating(content_audit $content_audit)
    {

    }

    /**
     * 监听数据创建后的事件。
     *
     * @param  content_audit $content_audit
     * @return void
     */
    public function created(content_audit $content_audit)
    {
        //如果是下线审核申请,不做任何处理
        if($content_audit->audit_type == 'offline') return true;
        $content_model = new content_audit::$content_model[$content_audit->content_model]();
        $content_model->where('id',$content_audit->content_id)->update([$content_audit->audit_type.'_status' => 1]);
    }

    /**
     * 监听数据即将更新的事件。
     *
     * @param  content_audit $content_audit
     * @return void
     */
    public function updating(content_audit $content_audit)
    {

    }

    /**
     * 监听数据更新后的事件。
     *
     * @param  content_audit $content_audit
     * @return void
     */
    public function updated(content_audit $content_audit)
    {
        //根据审核逻辑,获得审核状态
        $content_model = new content_audit::$content_model[$content_audit->content_model]();
        $status = content_audit::audit_status($content_audit->content_id,$content_audit->content_model,$content_audit->audit_type);

        //根据不同审核类型处理不同业务逻辑
        switch ($content_audit->audit_type) {
            case 'moderate':
                $content_model->where('id',$content_audit->content_id)->update([$content_audit->audit_type.'_status' => $status]);
                break;
            case 'online':
                $content_model->where('id',$content_audit->content_id)->update([$content_audit->audit_type.'_status' => $status]);
                break;
            case 'publish':
                $content_model->where('id',$content_audit->content_id)->update([$content_audit->audit_type.'_status' => $status]);
                break;

            case 'offline':
                //如果下线审核通过
                if($status == 3){
                    $content_model->where('id',$content_audit->content_id)->update(['online_status' => 2]);
                }
                break;
        }

    }

    /**
     * 监听数据即将保存的事件。
     *
     * @param  content_audit $content_audit
     * @return void
     */
    public function saving(content_audit $content_audit)
    {

    }

    /**
     * 监听数据保存后的事件。
     *
     * @param  content_audit $content_audit
     * @return void
     */
    public function saved(content_audit $content_audit)
    {

    }

    /**
     * 监听数据即将删除的事件。
     *
     * @param  content_audit $content_audit
     * @return void
     */
    public function deleting(content_audit $content_audit)
    {

    }

    /**
     * 监听数据删除后的事件。
     *
     * @param  content_audit $content_audit
     * @return void
     */
    public function deleted(content_audit $content_audit)
    {
        //如果是下线审核申请,不做任何处理
        if($content_audit->audit_type == 'offline') return true;
        $content_model = new content_audit::$content_model[$content_audit->content_model]();
        $content_model->where('id',$content_audit->content_id)->update([$content_audit->audit_type.'_status' => 0]);
    }

    /**
     * 监听数据即将从软删除状态恢复的事件。
     *
     * @param  content_audit $content_audit
     * @return void
     */
    public function restoring(content_audit $content_audit)
    {

    }

    /**
     * 监听数据从软删除状态恢复后的事件。
     *
     * @param  content_audit $content_audit
     * @return void
     */
    public function restored(content_audit $content_audit)
    {

    }
}